JavaScript 已禁用

为了获得更好的体验,请启用JavaScript,或点击下方链接跳转:

跳转至百度
Skip to content

WSL + rsync快速服务器同步

什么是WSL

WSL(Windows Subsystem for Linux,Windows Linux 子系统)是微软为 Windows 系统开发的一款 兼容层工具,核心作用是让用户在不安装传统虚拟机、不切换双系统的前提下,直接在 Windows 中运行完整的 Linux 发行版(如 Ubuntu、Debian、CentOS 等),并原生使用 Linux 的命令行工具、开发环境和应用程序。

简单来说:WSL 相当于在 Windows 系统里 “嵌入” 了一个轻量级的 Linux 环境,既能保留 Windows 的图形界面和日常操作,又能无缝使用 Linux 的命令行能力(如 bashgccdockernginx 等),是开发、运维、学习 Linux 人群的常用工具。

一、核心概念:WSL 1 vs WSL 2

WSL 分为两个主要版本,两者架构和能力差异较大,实际使用中需根据需求选择:

对比维度WSL 1WSL 2(推荐)
核心架构基于 “系统调用翻译层”:将 Linux 系统调用翻译成 Windows 系统调用,无需虚拟化基于 “Hyper - V 轻量级虚拟机”:在 Windows 中创建一个极小的、优化过的 Linux 内核虚拟机(但无需手动管理虚拟机)
性能访问 Windows 文件快,但 Linux 原生功能(如编译、Docker)性能较弱Linux 原生功能性能接近物理机,支持更多高负载场景(如 Docker、数据库),但访问 Windows 文件稍慢
功能支持不支持需要 Linux 内核级特性的工具(如 Docker、KVM、部分内核模块)支持几乎所有 Linux 功能(Docker、Systemd、内核调试、虚拟化工具)
文件系统互通Windows 和 Linux 文件系统可直接访问,但路径格式需适配同样支持文件互通,但建议将高频访问的项目放在 Linux 原生文件系统中(性能更好)
适用场景简单 Linux 命令(如 grepssh)、轻量脚本运行开发环境(Web / 后端开发)、Docker 容器、Linux 运维工具、内核级应用测试

二、WSL 的核心优势(为什么用 WSL?)

相比传统虚拟机(如 VMware、VirtualBox)或双系统,WSL 的核心优势在于 “轻量、无缝、高效”

  1. 无需复杂配置,开箱即用

    从微软商店直接安装 Linux 发行版(如 Ubuntu),几分钟即可完成初始化,无需手动配置虚拟机网络、磁盘分区。

  2. 资源占用极低

    WSL 2 启动后仅占用几百 MB 内存(远低于传统虚拟机的数 GB 占用),启动速度快(10 秒内启动 Linux 系统),关闭后自动释放资源。

  3. Windows 与 Linux 无缝互通

    • 文件互通:在 Windows 中可直接访问 WSL 的 Linux 文件(路径如 \\wsl$\Ubuntu\home\你的用户名);在 WSL 中也可访问 Windows 文件(路径如 /mnt/c/Users/你的Windows用户名/C盘 对应 /mnt/cD盘 对应 /mnt/d)。
    • 工具互通:在 WSL 中可调用 Windows 程序(如 code . 直接用 VS Code 打开当前 Linux 目录的文件);在 Windows 命令行(CMD/PowerShell)中也可调用 WSL 命令(如 wsl ls 查看 Linux 目录)。
  4. 原生支持开发工具链

    完美兼容 Linux 生态的开发工具,如gcc、python、node.js、docker、nginx等,无需担心 Windows 与 Linux 环境不一致导致的 “开发时正常、部署时出错” 问题。

三、WSL 的安装与基本使用(以 WSL 2 为例)

1. 前置条件

  • 系统版本:Windows 10 2004 及以上(或 Windows 11 任意版本)。
  • 硬件支持:开启 CPU 虚拟化功能(进入电脑 BIOS 开启,不同主板型号路径不同,通常在 “CPU Configuration” 中开启 “Intel VT - x” 或 “AMD - V”)。

2. 安装步骤(3 步完成)

步骤 1:开启 WSL 相关功能

管理员身份 打开 PowerShell,执行以下命令(开启 WSL 和虚拟机平台功能):

powershell
wsl --install
  • 该命令会自动开启 “适用于 Linux 的 Windows 子系统”“虚拟机平台” 两个功能,并下载安装默认的 Linux 发行版(通常是 Ubuntu)。
  • 执行后重启电脑,让功能生效。

步骤 2:初始化 Linux 发行版

重启后,系统会自动启动已安装的 Linux 发行版(如 Ubuntu),首次启动需设置 Linux 用户名密码(与 Windows 用户名 / 密码无关,用于 Linux 系统内的权限管理)。

示例:

bash
Enter new UNIX username: testuser  # 输入你想设置的Linux用户名(如testuser)
Enter new UNIX password:  # 输入密码(输入时不显示,输完按回车)
Retype new UNIX password:  # 再次输入密码确认

设置完成后,即可进入 Linux 命令行界面(testuser@DESKTOP - XXXXX:~$ 开头的提示符,代表已在 Linux 环境中)。

步骤 3:(可选)切换 WSL 版本

若默认安装的是 WSL 1,可通过以下命令切换到 WSL 2(性能更好):

  1. 先查看已安装的 Linux 发行版名称:

    powershell
    wsl --list --verbose  # 简称 wsl -l -v

    列是当前版本:

    plaintext
    NAME            STATE           VERSION
    Ubuntu          Running         1
  2. 切换版本(将 Ubuntu 替换为你的发行版名称):

    powershell
    wsl --set-version Ubuntu 2
    • 切换过程需要几分钟(需下载 Linux 内核文件),等待提示 “转换完成” 即可。

四、WSL 的基本操作

1. 启动与关闭 WSL

  • 启动
    • 方法 1:直接在 Windows 开始菜单中搜索 Linux 发行版名称(如 “Ubuntu”),点击启动。
    • 方法 2:在 PowerShell/CMD 中执行 wsl 命令,直接进入默认 Linux 发行版。
  • 关闭
    • 方法 1:在 Linux 命令行中执行 exit 退出当前会话(若只有一个会话,WSL 会自动关闭)。
    • 方法 2:在 PowerShell 中执行 wsl --shutdown,强制关闭所有 WSL 实例(用于解决 WSL 卡死等问题)。

2. 文件路径互通

  • Windows 访问 Linux 文件

    打开 Windows 文件管理器,在地址栏输入

    \\wsl$\

    即可看到已安装的 Linux 发行版,双击进入后可直接访问 Linux 的目录(支持复制、粘贴文件)。

  • Linux 访问 Windows 文件

    在 WSL 中,Windows 的磁盘(C、D、E 盘)会被挂载到

    /mnt/

    目录下,例如:

    • C 盘路径:/mnt/c(对应 Windows 的 C:\

    • D 盘路径:/mnt/d(对应 Windows 的 D:\

      示例:访问 Windows 桌面的文件:

    bash
    cd /mnt/c/Users/你的Windows用户名/Desktop  # 进入Windows桌面目录
    ls  # 查看桌面文件

3. 安装 Linux 软件

与原生 Linux 完全一致,通过发行版的包管理器安装软件,例如:

  • Ubuntu/Debian(用 apt):
bash
sudo apt update  # 更新软件源
sudo apt install nginx  # 安装Nginx
sudo apt install docker.io  # 安装Docker
  • CentOS(用 yumdnf):
bash
sudo yum install gcc  # 安装GCC编译器

五、WSL 的常见用途

  1. 开发环境搭建

    是 WSL 最核心的用途:开发者可在 Windows 上使用 Linux 原生的开发工具链,例如:

    • Web 开发:用 node.jsnpmnginx 搭建服务;
    • 后端开发:用 PythonJavaGo 编译运行程序,对接 Linux 下的数据库(如 MySQL、Redis);
    • 容器开发:WSL 2 支持 Docker Desktop,可直接在 Linux 环境中运行 Docker 容器(性能比 Windows 原生 Docker 更好)。
  2. Linux 运维与脚本运行

    运维人员可在 Windows 中直接使用 Linux 运维工具,如 ssh 远程连接服务器、ansible 批量管理节点、shell 脚本编写与执行(无需担心 Windows CMD 不兼容 Linux 脚本语法)。

  3. Linux 学习

    新手学习 Linux 时,无需安装复杂的虚拟机或双系统,通过 WSL 可快速熟悉 Linux 命令行、文件系统、权限管理等基础操作,且出错后可随时重装(从微软商店重新安装发行版即可)。

六、注意事项

  1. WSL 2 需要 Hyper - V 支持

    虽然 WSL 2 基于 Hyper - V,但无需手动安装 Hyper - V 完整组件(wsl --install 会自动配置);若电脑不支持硬件虚拟化(如老旧 CPU),则只能使用 WSL 1。

  2. 文件系统性能差异

    • WSL 2 中,Linux 原生文件系统(\\wsl$\ 下的文件)性能远高于 Windows 文件系统(/mnt/c 下的文件)。因此,建议将开发项目、编译任务放在 Linux 原生目录中(如 /home/用户名/project),避免放在 Windows 磁盘中导致卡顿。
  3. 部分 Linux 功能仍有限制

    WSL 并非 100% 复刻物理机 Linux,部分依赖硬件底层的功能仍不支持,例如:

    • 无法直接运行 Linux 图形界面程序(需配合 X Server 工具,如 VcXsrv,才能显示 GUI 窗口);
    • 不支持 Linux 内核的部分虚拟化功能(如 KVM 嵌套虚拟化)。
  4. 版本切换与数据兼容

    WSL 1 和 WSL 2 的数据可以兼容(切换版本后文件不会丢失),但切换时需注意:WSL 2 转 WSL 1 可能会因功能依赖导致部分软件无法运行(如 Docker)。

总结

WSL 是 Windows 与 Linux 生态的 “桥梁”—— 它既解决了 Windows 缺乏原生 Linux 环境的痛点,又避免了传统虚拟机 “重资源、高延迟” 的问题,尤其适合 开发者、运维人员、Linux 学习者 使用。如果你的工作需要频繁在 Windows 和 Linux 环境间切换,WSL 几乎是最优解。

WSL + rsync 同步

在 WSL(Windows Subsystem for Linux)中使用 rsync 向 Linux 服务器同步文件,是一种高效、原生的方案 ——WSL 内的 Linux 发行版(如 Ubuntu、Debian)可直接调用原生 rsync 命令,无需在 Windows 端安装额外工具(如 cwRsync),且支持 ssh 加密传输(安全且无需配置复杂的 rsyncd 服务)。

一、核心优势

相比 Windows 原生环境,WSL + rsync 同步的优势:

  1. 原生 Linux 工具链:WSL 内的 rsync 与目标 Linux 服务器的 rsync 版本兼容,避免跨系统适配问题;
  2. 无缝访问 Windows 文件:WSL 可直接访问 Windows 磁盘(如 C:\ 对应 /mnt/c/D:\ 对应 /mnt/d/),无需手动拷贝文件到 WSL;
  3. 支持 SSH 免密登录:通过 WSL 生成 SSH 密钥,可实现向 Linux 服务器的免密同步,适合自动化场景。

二、前置准备

需确保 WSL 环境、目标 Linux 服务器、网络连通性三者就绪:

1. WSL 端准备(以 Ubuntu 为例)

① 安装 rsync(若未默认安装)

WSL 内的 Ubuntu 通常预装 rsync,若未安装,执行:

bash
sudo apt update && sudo apt install -y rsync

验证安装:rsync --version(显示版本号即正常)。

② 确认 WSL 可访问目标 Linux 服务器

通过 ssh 测试连通性(rsync 优先推荐 ssh 传输模式):

bash
ssh 目标Linux用户名@目标LinuxIP  # 例如:ssh user@192.168.1.100
  • 首次连接会提示 “是否继续连接”,输入 yes 后,输入目标服务器密码,若能成功进入目标服务器的命令行,说明网络连通。
  • 若连接失败:检查目标服务器防火墙是否开放 22 端口(sudo ufw allow 22)、IP 是否正确、网络是否互通(ping 目标LinuxIP)。

2. 目标 Linux 服务器准备

无需额外安装 rsync(绝大多数 Linux 发行版预装),仅需确保:

  • SSH 服务正常运行sudo systemctl status ssh(显示 active (running) 即正常,未运行则执行 sudo systemctl start ssh);

  • 目标同步目录权限:确保目标服务器的同步目录(如 /home/user/sync_dir)允许当前用户读写,例如:

    bash
    # 在目标服务器上创建同步目录并设置权限
    mkdir -p /home/user/sync_dir
    chown -R user:user /home/user/sync_dir  # 替换为你的用户名

三、两种同步模式(推荐 SSH 模式)

rsync 支持两种核心同步模式:SSH 传输模式(无服务端,简单安全)和 rsyncd 服务模式(需配置服务端,适合频繁同步)。

模式 1:SSH 传输模式(推荐,无需配置 rsync 服务)

通过 ssh 协议作为传输通道,直接同步文件,无需在目标服务器配置 rsyncd 服务,适合临时或常规同步场景。

核心命令格式

bash
rsync [参数] 本地源路径 目标Linux用户名@目标LinuxIP:远程目标路径

常用参数说明

参数作用
-a归档模式(关键参数):包含 -r(递归)、-l(保留软链接)、-p(保留权限)、-t(保留时间戳)等,适合完整目录同步
-v详细输出:显示同步的文件列表和进度,便于排查问题
-z压缩传输:减少网络带宽占用(适合跨网络同步,本地局域网可省略)
--progress显示实时同步进度(如文件大小、传输百分比、剩余时间)
--delete镜像同步:删除远程目标路径中 “本地源路径没有” 的文件,确保两端完全一致(谨慎使用!)
-e "ssh -p 端口号"若目标服务器 SSH 端口非默认 22(如 2222),需指定端口
--exclude 文件名/目录排除不需要同步的文件或目录(可多次使用)

实际示例

以下示例均在 WSL 终端中执行:

示例 1:同步 WSL 内的目录到 Linux 服务器

假设在 WSL 内有目录 /home/ubuntu/documents/(WSL 原生路径),需同步到目标服务器 user@192.168.1.100/home/user/sync_dir/

bash
rsync -avz --progress /home/ubuntu/documents/ user@192.168.1.100:/home/user/sync_dir/
  • 注意路径末尾的 //home/ubuntu/documents/ 表示同步目录内的所有文件,若去掉 /(即 documents),则会在远程创建 sync_dir/documents/ 再同步文件。
示例 2:同步 Windows 磁盘的文件到 Linux 服务器

假设要同步 Windows D:\工作文件\project\ 到目标服务器,WSL 中该路径对应 /mnt/d/工作文件/project/

bash
rsync -avz --progress /mnt/d/工作文件/project/ user@192.168.1.100:/home/user/sync_dir/project/
  • 无需将 Windows 文件拷贝到 WSL 内,直接通过 /mnt/ 路径访问并同步,高效便捷。
示例 3:指定 SSH 非默认端口 + 排除文件

若目标服务器 SSH 端口为 2222,且需排除 *.log 日志文件和 temp/ 临时目录:

bash
rsync -avz --progress -e "ssh -p 2222" --exclude "*.log" --exclude "temp/" /home/ubuntu/documents/ user@192.168.1.100:/home/user/sync_dir/
示例 4:镜像同步(删除远程多余文件)

若需确保远程目录与本地完全一致(远程有、本地没有的文件会被删除),添加 --delete 参数(谨慎使用,避免误删重要文件):

bash
rsync -avz --progress --delete /home/ubuntu/documents/ user@192.168.1.100:/home/user/sync_dir/

模式 2:rsyncd 服务模式(适合频繁 / 自动化同步)

若需定期、自动化同步(如定时任务),可在目标 Linux 服务器配置 rsyncd 服务(独立于 SSH),通过模块名访问,无需每次输入 SSH 密码(可配置独立认证)。

步骤 1:目标 Linux 服务器配置 rsyncd 服务

① 编辑 rsyncd 配置文件
bash
sudo vim /etc/rsyncd.conf

添加以下配置(根据实际需求修改):

sh
# 全局配置
uid = user          # 运行 rsync 服务的用户(替换为你的目标服务器用户名)
gid = user          # 运行 rsync 服务的用户组
use chroot = no     # 不启用 chroot(避免权限问题)
max connections = 5 # 最大连接数
pid file = /var/run/rsyncd.pid  # PID 文件路径
log file = /var/log/rsyncd.log  # 日志文件路径(便于排查问题)

# 同步模块配置(自定义模块名,如 [sync_module])
[sync_module]
path = /home/user/sync_dir      # 模块对应的实际目录(目标同步目录)
comment = Sync files from WSL   # 模块描述(可选)
read only = no                  # 允许写入(同步到服务器需设为 no)
list = yes                      # 允许列出模块(调试用)
auth users = rsync_user         # 认证用户名(自定义,如 rsync_user)
secrets file = /etc/rsyncd.secrets  # 密码文件路径
hosts allow = 192.168.1.0/24    # 允许访问的 IP 段(如 WSL 所在网段,增强安全性)
② 创建密码文件并设置权限
bash
# 创建密码文件(格式:用户名:密码,如 rsync_user:123456)
sudo echo "rsync_user:123456" > /etc/rsyncd.secrets
# 必须设置 600 权限(否则 rsync 服务无法读取)
sudo chmod 600 /etc/rsyncd.secrets
③ 启动 rsyncd 服务并设置开机自启
bash
# 启动服务
sudo systemctl start rsync
# 设置开机自启
sudo systemctl enable rsync
# 验证服务状态(显示 active 即正常)
sudo systemctl status rsync
④ 开放 rsync 端口(默认 873)

若目标服务器启用防火墙(如 ufw),需允许 873 端口:

bash
sudo ufw allow 873
sudo ufw reload

步骤 2:WSL 端通过 rsyncd 模块同步

核心命令格式(无需 SSH,直接连接 rsync 模块):

bash
rsync [参数] 本地源路径 rsync_user@目标LinuxIP::sync_module/远程子路径
  • ::sync_module:双冒号后接目标服务器配置的模块名(如 [sync_module]);
  • 需指定 auth users 配置的用户名(如 rsync_user),密码可通过密码文件自动输入(避免交互)。
示例:WSL 同步到 rsyncd 模块
bash
# 方法 1:手动输入密码
rsync -avz --progress /home/ubuntu/documents/ rsync_user@192.168.1.100::sync_module/

# 方法 2:通过密码文件自动输入(适合自动化)
# 1. 在 WSL 内创建密码文件(仅含密码,如 123456)
echo "123456" > ~/.rsync_secrets
# 2. 设置 600 权限
chmod 600 ~/.rsync_secrets
# 3. 同步时指定密码文件
rsync -avz --progress --password-file=~/.rsync_secrets /home/ubuntu/documents/ rsync_user@192.168.1.100::sync_module/

四、优化:SSH 免密登录(避免每次输密码)

无论使用哪种模式,若基于 SSH 传输,可通过 SSH 密钥登录 实现免密同步,步骤如下:

1. 在 WSL 内生成 SSH 密钥对

bash
ssh-keygen -t rsa -b 4096  # 生成 RSA 密钥对(4096 位加密更安全)
  • 执行后按 3 次回车(无需设置密钥密码,若需更高安全可设置);
  • 密钥对默认保存在 ~/.ssh/ 目录:id_rsa(私钥,勿泄露)、id_rsa.pub(公钥,需上传到目标服务器)。

2. 将公钥上传到目标 Linux 服务器

bash
ssh-copy-id -i ~/.ssh/id_rsa.pub 目标Linux用户名@目标LinuxIP
  • 首次执行需输入目标服务器密码,上传成功后,后续通过 sshrsync 连接时无需再输密码。

3. 验证免密登录

bash
ssh 目标Linux用户名@目标LinuxIP  # 无需输密码即可进入目标服务器
  • 若成功登录,后续 rsync 同步命令(如模式 1 的示例)将自动免密执行。

五、自动化:定时同步(结合 crontab)

若需定期同步(如每天凌晨 2 点),可在 WSL 内通过 crontab 设置定时任务:

1. 编辑 crontab 任务列表

bash
crontab -e
  • 首次执行会提示选择编辑器,推荐选 nano(简单易用)。

2. 添加定时任务(示例)

在文件末尾添加以下内容(每天凌晨 2 点同步 WSL 目录到目标服务器):

bash
# 格式:分 时 日 月 周 命令
0 2 * * * rsync -avz --delete /home/ubuntu/documents/ user@192.168.1.100:/home/user/sync_dir/ > ~/rsync_cron.log 2>&1
  • > ~/rsync_cron.log 2>&1:将同步日志输出到 ~/rsync_cron.log,便于排查问题;
  • 时间格式说明:0 2 * * * 表示 “每分钟 0 分、每小时 2 点、每天、每月、每周任意日”。

3. 重启 crontab 服务(确保生效)

bash
sudo systemctl restart cron
sudo systemctl enable cron  # 设置开机自启

六、常见问题排查

  1. 同步权限被拒(Permission denied)
    • 检查目标服务器同步目录权限(确保 chown 到当前用户);
    • WSL 内本地文件权限不足:执行 chmod -R 755 本地源路径(根据需求调整权限)。
  2. rsync: connection refused
    • SSH 模式:检查目标服务器 SSH 服务是否运行、22 端口是否开放;
    • rsyncd 模式:检查目标服务器 rsync 服务是否运行、873 端口是否开放。
  3. 同步速度慢
    • 跨网络同步:添加 -z 参数压缩传输;
    • 本地局域网:可去掉 -z(压缩会消耗 CPU,反而降低速度);
    • 排除大文件 / 无用文件:使用 --exclude 参数减少同步数据量。
  4. Crontab 任务不执行
    • 检查命令路径是否绝对(如 rsync 路径可通过 which rsync 查看,确保在 crontab 中用绝对路径);
    • 查看日志:cat ~/rsync_cron.log 排查具体错误(如权限、网络问题)。

总结

WSL + rsync 是 Windows 向 Linux 服务器同步文件的高效方案

  • 优先选择 SSH 模式(无需配置服务端,安全简单),配合 SSH 免密登录实现便捷同步;
  • 频繁自动化同步可选择 rsyncd 模式 + crontab,减少交互操作;
  • 同步 Windows 文件时,直接通过 WSL 的 /mnt/ 路径访问,无需额外拷贝,提升效率。

同步脚本

这是一份windows使用WSL的rsync功能快速向指定linux服务器同步的脚本示例

bat
@echo off
@echo on  :: 关键:显示每一步执行过程,方便定位错误
setlocal enabledelayedexpansion

:: ==============================================
:: 配置区域(必须根据你的实际情况修改!)
:: ==============================================
set "LOCAL_DIR=/mnt/d/DL/Project/ww-blog/dist/"  :: WSL下的本地目录(确保存在)
set "REMOTE_USER=root"                           :: 远程Linux用户名(如root、ubuntu)
set "REMOTE_HOST=121.199.xx.xx"                  :: 远程服务器IP(确保能ping通)
set "REMOTE_DIR=/xx/dist/"            			 :: 远程目录(确保有写入权限)
set "SSH_PORT=22"                                :: 远程SSH端口(默认22,无需改则保留)
:: ==============================================

:: 1. 防止闪退:任何命令出错立即暂停并提示
echo.
echo ==============================================
echo 正在检查基础环境(WSL是否可用)...
echo ==============================================
:: 检查WSL是否已安装并启用
wsl --version >nul 2>&1
if %errorlevel% neq 0 (
    echo.
    echo 【错误1】WSL未安装或未启用!
    echo 解决方法:
    echo 1. 按Win+X打开"终端(管理员)",执行 wsl --install 安装WSL
    echo 2. 安装后重启电脑,再运行此脚本
    pause  :: 强制暂停,不关闭窗口
    exit /b 1
)

:: 2. 检查本地目录是否存在(WSL路径)
echo.
echo ==============================================
echo 正在检查本地目录:%LOCAL_DIR%
echo ==============================================
wsl ls "%LOCAL_DIR%" >nul 2>&1  :: 用WSL命令检查路径是否存在
if %errorlevel% neq 0 (
    echo 本地目录检查成功:%LOCAL_DIR%
) else (
    echo.
    echo 【错误2】本地目录不存在!
    echo 请确认:
    echo 1. WSL下的路径是否正确(比如D盘对应/mnt/d/,不要漏写/mnt/)
    echo 2. 目录是否已创建(在WSL中执行 mkdir -p %LOCAL_DIR% 创建)
    pause
    exit /b 1
)


:: 通过SSH自动创建远程目录(如果不存在)
echo.
echo ==============================================
echo 正在检查并创建远程目录:%REMOTE_DIR%
echo ==============================================
wsl ssh -p %SSH_PORT% %REMOTE_USER%@%REMOTE_HOST% "mkdir -p %REMOTE_DIR%"
if %errorlevel% equ 0 (
    echo 远程目录准备成功(已存在或已创建)
) else (
    echo.
    echo 【错误3】无法创建远程目录!
    echo 可能原因:SSH连接失败/远程用户无权限
    echo 请手动测试SSH连接:
    echo wsl ssh -p %SSH_PORT% %REMOTE_USER%@%REMOTE_HOST%
    pause
    exit /b 1
)

:: 3. 执行rsync同步(核心命令)
echo.
echo ==============================================
echo 开始同步文件...
echo 远程目标:%REMOTE_USER%@%REMOTE_HOST%:%REMOTE_DIR%(端口%SSH_PORT%)
echo ==============================================
:: 用WSL执行rsync,输出详细日志到屏幕(不隐藏错误)
wsl rsync -avz --progress --delete -e "ssh -p %SSH_PORT%" "%LOCAL_DIR%" "%REMOTE_USER%@%REMOTE_HOST%:%REMOTE_DIR%"

:: 4. 检查同步结果
if %errorlevel% equ 0 (
    echo.
    echo ==============================================
    echo 【成功】文件同步完成!
    echo ==============================================
) else (
    echo.
    echo ==============================================
    echo 【错误3】同步失败!常见原因:
    echo 1. 远程服务器IP/端口错误(无法连接)
    echo 2. 远程用户名错误(比如不是root,而是ubuntu)
    echo 3. 远程目录无写入权限(在远程执行 chown -R %REMOTE_USER% %REMOTE_DIR%)
    echo 4. 首次连接未确认SSH密钥(手动在WSL中执行 ssh %REMOTE_USER%@%REMOTE_HOST% 确认)
    echo ==============================================
)

:: 5. 强制暂停,确保窗口不关闭
echo.
echo 按任意键关闭窗口...
pause
endlocal

作者:威威

版权:此文章版权归 威威 所有,如有转载,请注明出处!

链接:可点击右上角分享此页面复制文章链接

最后更新于:

最近更新